{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "94a2a28b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b82d9f7a",
   "metadata": {},
   "source": [
    "# import from numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "21cfc228",
   "metadata": {},
   "outputs": [],
   "source": [
    "a=np.array([2,3.3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f668b6a9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([2.0000, 3.3000], dtype=torch.float64)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.from_numpy(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7321b682",
   "metadata": {},
   "outputs": [],
   "source": [
    "a=np.ones([2,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0b0b9a31",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1., 1., 1.],\n",
       "        [1., 1., 1.]], dtype=torch.float64)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.from_numpy(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45b9badf",
   "metadata": {},
   "source": [
    "# import from list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e498b52a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([2.0000, 3.2000])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.tensor([2.,3.2]) # tensor与Tensor有区别"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df8bc00e",
   "metadata": {},
   "source": [
    "tensor：以现有的参数为数据\n",
    "\n",
    "Tensor：以shape作为数据，生成对应形状的矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "773f92af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([2.0000, 3.2000])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.FloatTensor([2.,3.2])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b40da8bc",
   "metadata": {},
   "source": [
    "以后直接传data时就用tensor，Tensor用来传shape，并且将Tensor写成FloatTensor,以免混淆"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "6ee49f7e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 2.0000,  3.2000],\n",
       "        [ 1.0000, 22.3000]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.tensor([[2.,3.2],[1.,22.3]])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6ff5611",
   "metadata": {},
   "source": [
    "# 生成未初始化的数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b75fb76c",
   "metadata": {},
   "source": [
    "torch.empty()\n",
    "\n",
    "torch.FloatTensor(d1,d2,d3)\n",
    "\n",
    "torch.IntTensor(d1,d2,d3)\n",
    "\n",
    "一般用这三个方法来初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "05f65da3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([-6.5663e-09])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.empty(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "5d1acf9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-6.5663e-09,  4.5902e-41,  1.6601e-35],\n",
       "        [ 0.0000e+00,  4.4842e-44,  0.0000e+00]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.Tensor(2,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "e3b257ef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[          0,           0,          81],\n",
       "        [          0, -1310614304,       32757]], dtype=torch.int32)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.IntTensor(2,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ffe0fe5f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1.6460e-35, 0.0000e+00, 1.6696e-35],\n",
       "        [0.0000e+00, 8.9683e-44, 0.0000e+00]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.FloatTensor(2,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e311fcac",
   "metadata": {},
   "source": [
    "初始化完后这只是作为一个容器，后面记得覆盖掉，不然会有问题"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce87f10f",
   "metadata": {},
   "source": [
    "# 设置默认数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "833e44d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'torch.FloatTensor'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.tensor([1.2,3]).type() # pytorch默认是torch.FloatTensor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "f6dac45f",
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.set_default_tensor_type(torch.DoubleTensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "25d4bc67",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'torch.DoubleTensor'"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.tensor([1.2,3]).type()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b42653a0",
   "metadata": {},
   "source": [
    "增强学习一般用double，其他一般用float"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff42a369",
   "metadata": {},
   "source": [
    "# rand/rand_like, randint"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "76b167e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.3405, 0.1139, 0.2377],\n",
       "        [0.4325, 0.2926, 0.2182],\n",
       "        [0.3808, 0.5611, 0.4872]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.rand(3,3) # rand（均匀分布）生成0-1之间的数字（不包括1）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "23775271",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = torch.rand(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "0a5667bf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.7200, 0.7088, 0.0418],\n",
       "        [0.6283, 0.4629, 0.7757],\n",
       "        [0.5133, 0.1704, 0.6988]])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.rand_like(a) # 生成与a形状相同的矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "a7a27469",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[2, 6, 2],\n",
       "        [5, 5, 9],\n",
       "        [4, 9, 8]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.randint(1,10,[3,3]) # (最小值，最大值，【矩阵】) ，该方法生成的是整数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c6a0da8d",
   "metadata": {},
   "source": [
    "# randn（正态分布）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "71441055",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.2159, -0.3605,  0.4127],\n",
       "        [-1.2786,  0.6666, -0.2773],\n",
       "        [ 0.8413, -0.4487,  0.9008]])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.randn(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b2562f6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([-0.3060,  1.0070, -1.2464, -0.5778,  0.9589,  0.0659, -0.0091,  0.1987,\n",
       "         0.0905,  0.1471])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.normal(mean=torch.full([10],0.),std=torch.arange(1,0,-0.1))  # 自定义均值和方差\n",
    "# torch.full([10],0.)生成长度为10但都为0的向量；std=torch.arange(1,0,-0.1)方差1~0逐渐减小"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9e25144",
   "metadata": {},
   "source": [
    "torch.normal(mean均值，std方差)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7352e09a",
   "metadata": {},
   "source": [
    "# full (把tensor全部赋值为1个元素)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd472e8c",
   "metadata": {},
   "source": [
    "full（shape, val）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6f6834db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[7, 7, 7],\n",
       "        [7, 7, 7]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.full([2,3],7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "409e8793",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(7)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.full([],7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dc3a533a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(7.)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.full([],7.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "6c9fed65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([7])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.full([1],7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1a02bf54",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([7.])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.full([1],7.)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3ab969a",
   "metadata": {},
   "source": [
    "# arange/range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "eaaf6aa8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.arange(0,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "ee0311f5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0, 2, 4, 6, 8])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.arange(0,10,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "dfd41d07",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_4864/497691777.py:1: UserWarning: torch.range is deprecated and will be removed in a future release because its behavior is inconsistent with Python's range builtin. Instead, use torch.arange, which produces values in [start, end).\n",
      "  torch.range(0,10)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.range(0,10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6e12d56",
   "metadata": {},
   "source": [
    "# linspace/logspace (在arange里第三个参数是步长，在这里是数量)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f6b1b4d",
   "metadata": {},
   "source": [
    "## linspace 生成等差数列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0bf466c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([ 0.0000,  3.3333,  6.6667, 10.0000])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.linspace(0,10,steps=4) # 从0~10等分地切4份"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "42275c15",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([ 0.0000,  1.1111,  2.2222,  3.3333,  4.4444,  5.5556,  6.6667,  7.7778,\n",
       "         8.8889, 10.0000])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.linspace(0,10,steps=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "1f5c3b2b",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.linspace(0,10,steps=11)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84c70767",
   "metadata": {},
   "source": [
    "## logspace 生成以val1~val2为指数、10为底数的数列，第三个参数为指数的步长"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "9d001d70",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([ 1.0000,  1.2915,  1.6681,  2.1544,  2.7826,  3.5938,  4.6416,  5.9948,\n",
       "         7.7426, 10.0000])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.logspace(0,1,steps=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "802d99b8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1.0000, 0.7743, 0.5995, 0.4642, 0.3594, 0.2783, 0.2154, 0.1668, 0.1292,\n",
       "        0.1000])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.logspace(0,-1,steps=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5654ff8",
   "metadata": {},
   "source": [
    "# ones/zeros/eye (eye:单位矩阵)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "37b7a74f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1., 1., 1.],\n",
       "        [1., 1., 1.],\n",
       "        [1., 1., 1.]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.ones(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "efb50f13",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0., 0., 0.],\n",
       "        [0., 0., 0.],\n",
       "        [0., 0., 0.]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.zeros(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "b9c7747a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1., 0., 0.],\n",
       "        [0., 1., 0.],\n",
       "        [0., 0., 1.]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.eye(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "857c2027",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = torch.zeros(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "325744e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1., 1., 1.],\n",
       "        [1., 1., 1.],\n",
       "        [1., 1., 1.]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.ones_like(a) # 往里传的是shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8875750",
   "metadata": {},
   "source": [
    "# randperm（随机打散）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "b72cc7c8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([7, 9, 1, 8, 3, 5, 6, 4, 2, 0])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.randperm(10)  # 生成0~10的随机索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "d53bc739",
   "metadata": {},
   "outputs": [],
   "source": [
    "a=torch.rand(2,3)\n",
    "b=torch.rand(2,2)\n",
    "idx=torch.randperm(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "db6ed3eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1, 0])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "b103e57f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.4437, 0.8685, 0.0322],\n",
       "        [0.0647, 0.2373, 0.6999]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "cfb64ce4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.5307, 0.4555],\n",
       "        [0.9082, 0.1322]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b[idx]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c849321e",
   "metadata": {},
   "source": [
    "### a与b用同一个种子（idx）可在打乱时进行一个协同"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "ac727c64",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[0.0647, 0.2373, 0.6999],\n",
       "         [0.4437, 0.8685, 0.0322]]),\n",
       " tensor([[0.9082, 0.1322],\n",
       "         [0.5307, 0.4555]]))"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a,b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c943c7c7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
